/*
 * Modelos.h
 *
 *  Created on: 23/06/2012
 *      Author: natuchis
 */

#ifndef MODELOS_H_
#define MODELOS_H_

#include "Datos.h"
#include "ModeloMenos1.h"
#include "Modelo0.h"
#include "ModeloX.h"
#include "../Archivos/AdminDeContextos.h"
#include "../CompAritmetico/CompresorAritmetico.h"

#include <vector>
using namespace std;

class Modelos {

public:

	Modelos(CompresorAritmetico *arit, AdminDeContextos *admin);
	~Modelos();

	void setOrdenMaximo(unsigned short int ordenMax);

	void comprimir(string contexto, char carac, bool estoyEnElEof);

	void descomprimir();

	void agregarContextoEnModeloSiguiente(string contexto, char carac);

//	void actualizarModeloSiguienteParaDescomprimir(string contexto, char carac);

	bool existeCaracterEnEsteContextoEnOrdenActual(string contexto, char carac);

	void vaciarExcluidos();

	void actualizarModelosSiguientes(char carac, int orden);


private:

	vector<Modelo*> *vecModelos;

	CompresorAritmetico *arit;

	AdminDeContextos *admin;

	Modelo* modeloMenos1;

	set<char> *charsExcluidos;

	int ordenActual;

	unsigned short int ordenMax;

	string ruta;

	void incrementarOrden();
	void decrementarOrdenActual();
};

#endif /* MODELOS_H_ */
